perm filename NTBOX.OLD[CMS,LCS]1 blob
sn#393228 filedate 1978-11-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00004 00003 Reset and interrupt vectors.
C00006 00004 INPUT WAIT
C00009 00005 FIXCMD: MOVRA CMD Fix for no clobber CMD?
C00011 00006 Put SUBOFF after CKACT?
C00013 00007 RSTRAM: SRB0 Select ram bank 0.
C00015 00008 Byte input routine
C00017 00009 Alfa led output routines.
C00018 00010 Bit spreading table
C00020 00011 MOVRI K,JSW
C00022 00012 Alfa led message table.
C00025 00013 0 ↔ 0 ↔ 0 ↔ 0
C00028 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
;Ram bank 0 registers.
K ← 0
I ← 1
N ← 2
T ← 3 ;Timer overflow count.
CMD ← 4 ;TBOX and JS led bits.
CMD1 ← 5 ;Alfa led message index.
OFFL ← 6 ;Alfa off timer low.
OFFH ← 7 ;High.
;Ram10-27 = Stack.
;Ram bank 1 registers.
P ← 30 ;Pots pointer.
O ← 31 ;Offset pointer.
X ← 32
Y ← 33
Z ← 34
SW0 ← 35 ;TBOX switch bits.
SW1 ← 36
SW2 ← 37
;Standard ram.
SPD ← 40 ;Speed pot.
P0 ← 41 ;Joy stick pots.
P1 ← 42
P2 ← 43
P3 ← 44
JSW ← 45 ;Joy stick switch bits.
OSPD ← 46 ;Old speed pot.
OP0 ← 47 ;Joy stick offsets.
OP1 ← 50
OP2 ← 51
OP3 ← 52
OJSW ← 53 ;Old joy stick switch bits.
OCMD ← 54 ;Old led bits.
OCMD1 ← 55 ;Old alfa led index.
JSC ← 56 ;Joy stick not calib. flag.
XTAL ← =6000000 ;In hertz.
BRATE ← =9600 ;Baud rate
TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
TT ← 1 ;Triple throw switch port.
S ← 2 ;Scan and A/D port.
PBL ← 4 ;Push button port low.
PBH ← 5 ;Push button port high.
CEW ← 6 ;Alfa led chip enables and write port.
JS ← 7 ;Joy stick, CU, and led latch port.
;Reset and interrupt vectors.
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
DISTI ;TIMER INT VECTOR
RETR
;Power on reset.
RST: MOVI 377 ;SETUP INPUT PORTS
OUTB ;Latch bus output.
OUTP TT ;SPTT switches.
MOVI 77 ;P4-7 and SCAN.
OUTP S
MOVAX PBL ;PBSW low.
MOVAX PBH ;PBSW high.
;Clear cursor memory.
MOVI 70 ;7/2,,10.
MOVAX CEW ;Enable all alfa leds.
ROL ;A ← 160.
MOVAX JS ;Clear JS and CU.
SWAP ;A ← 7.
ANPA CEW ;NOT W
CPLA
ORPA CEW ;W
MOVI 217 ;10,,17.
ORPA CEW ;Disable all alfa leds.
SWAP ;A0-3 ← 10.
ORPA JS ;NOT CU.
CALL CLED ;Clear leds
MOVAT ;Setup timer?
STRTT
CLRF1 ;Set alfa leds on.
MOVRI OFFL,1 ;Setup alfa off timer.
MOVRI OFFH,1
JMP SETFLG
; Set scan flag and timer
UPFLG: DJNZ T,CKIN
SETFLG: MOVRI T,3 ;4 = 96 ms?
CLRF0 ;Set scan flag
JF1S CKIN ;Check if alfa off.
DJNZ OFFL,CKIN ;OFFW ← OFFW - 1.
DJNZ OFFH,CKIN
CPLF1 ;Set alfa led off flag.
;Put alfa clear in pscan?
CALL CALED ;Clear alfa leds.
;INPUT WAIT
OFFSET ← TBIT/2 ;Center delay.
ZERA: CLRA ;Clear A for input byte.
INWAI: JTF UPFLG ;Check if timer time out.
CKIN: JT0H INWAI ;Check for start bit.
MOVRI K,OFFSET-4 ;Center - Itime.
CENTER: DJNZ K,CENTER ;Wait for center of bit
JT0H INWAI ;Check if valid start bit
MOVRI N,11 ;# of bits -1
ILOOP: CALL IWAI ;Add iwai here?
DJNZ N,ILOOP
ROLC ;Shift out stop bit
JCC ZERA ;Check for good stop bit.
JBS 7,BYTE1 ;Check if first or second byte.
MOVAR CMD ;Save first input byte.
JMP ZERA ;Get next byte.
BYTE1: MOVAR CMD1 ;Save second byte.
MOVRI K,OCMD1 ;Check if different than old.
XORM K
JZ GSPD
MOVRA CMD1
SWAP ;Shift etc.
ROR
CALL OALFA
GSPD: CLRA ;SPD default.
JT1H ADZRO ;Speed off.
;A/DCHAN ← SPEED.
CLRA
OUTB ;Latch zero on bus.
ORPI S,200 ;ALE.
ANPI S,177 ;NOT ALE.
CALL CONVRT ;Wait for speed.
JNZ ADZRO ;Check if on and zero.
INCA ;A ← 1.
ADZRO: MOVRI K,SPD ;Save speed pot value.
MOVAM K
CALL CLED ;Clear cal. and mode leds.
MOVRA CMD ;Get mode code.
RORC ;Get cal. bit.
ANI 7 ;Flush JS led bits.
CALL WLED ;Write mode led.
JCC FIXCMD ;No calib. bit.
CLRA ;Led 0.
CALL WLED ;Write cal. led.
FIXCMD: MOVRA CMD ;Fix for no clobber CMD?
SWAP ;Get JS led bits.
ANI 3 ;2 JS led bits.
MOVRI K,JSC
ORM K ;A ← A .OR. JSC.
INCA ;Fix for latch.
MOVAR CMD
;A/D convert routines.
JINT GPOTS ;Check for joy stick.
;RAM(JSW) ← 0. Zero joy stick switches.
;JSC ← 0.
JMP CKSCAN
GPOTS: MOVRA CMD
MOVAR I ;Save JS led bits.
MOVI 1 ;Chanel 1.
OUTB ;Latch bus output.
ORPI S,200 ;ALE
ANPI S,177 ;NOT ALE.
MOVI 2 ;CLR bit.
ORPA JS ;CLR.
CPLA
ANPA JS ;NOT CLR.
MOVRI P,P0 ;JS pot index.
MOVRI N,5 ;# of pots + switch channel.
ADLOOP: CALL CONVRT ;Wait for A/D.
MOVAM P ;Ram(p) ← Pot(p).
DJNZ I,CNTIT ;Check if JS led.
MOVI 373 ;NOT JS led latch bit.
ANPA JS ;NOT LAT.
CPLA
ORPA JS ;LAT.
CNTIT: MOVI 1
ORPA JS ;CNT
CPLA
ANPA JS ;NOT CNT.
INCR P ;Next pot.
DJNZ N,ADLOOP ;Next channel.
;Check for scan flag.
CKSCAN: JF0S CKJSC ;Scan flag.
JMP SCAN ;Scan switches.
CKJSC: SRB1 ;Select ram bank 1.
MOVRI K,JSC
MOVMA K ;A ← JSC.
JBS 2,SUBOFF;Check if joy stick calib.
ZPOTS: CLRA
MOVAR P0 ;Ram(Pots) ← 0.
MOVAR P1
MOVAR P2
MOVAR P3
JMP CKACT
;Put SUBOFF after CKACT?
SUBOFF: MOVRI P,P0 ;Pots pointer.
MOVRI O,OP0 ;Offset pointer.
MOVRI N,4 ;# of pots.
OFFSL: MOVMA P ;Get pot.
CPLA
ADDM O ;Subtract offset.
CPLA
MOVAM P ;Save pot.
INCR P
INCR O
DJNZ N,OFFSL
;Activity check.
CKACT: SRB0 ;Select ram bank 0.
MOVRI K,OCMD
MOVMA K
XORR CMD ;A ← CMD .XOR. OCMD.
JNZ ACTIVE
MOVRI K,OCMD1 ;Old alfa index.
MOVMA K
XORR CMD1
JNZ ACTIVE
SRB1 ;Select ram bank 1.
MOVRA SW0
JNZ RSTRAM
MOVRA SW1
JNZ RSTRAM
MOVRA SW2
ANI 77 ;Mask out JS and P/O bits.
JNZ RSTRAM
;Check if JS zero, not old?
MOVRI P,SPD ;Now pot index.
MOVRI O,OSPD ;Old pot index.
MOVRI N,6 ;# of pots + JSW.
POTCK: MOVMA P ;A ← RAM(NOW).
XORM O ;A ← A .XOR. RAM(OLD).
JNZ RSTRAM ;Active.
INCR P ;Next pot.
INCR O
DJNZ N,POTCK
JMP OBITS ;Not active.
RSTRAM: SRB0 ;Select ram bank 0.
;Don't save JS pots?
ACTIVE: MOVRA CMD ;OLD ← NEW.
MOVRI K,OCMD
MOVAM K ;OCMD.
MOVRA CMD1
INCR K
MOVAM K ;OCMD1.
MOVRI P,SPD
MOVRI O,OSPD
MOVRI N,5
;Not save JS pots?
SAVL: MOVMA P ;A ← Ram(new).
MOVAM O ;Ram(old) ← A.
INCR P
INCR O
DJNZ N,SAVL
CLRF1 ;Alfa led off flag ← -1.
MOVRI OFFH,10 ;OFFW ← tOWAIT.
OBITS: SRB1 ;Select ram bank 1?
MOVRI I,SW0 ;Point to out bytes.
MOVRI CMD,10 ;# of output bytes.
OUTL: MOVMA I ;Get output byte.
CALL OBYTE ;Put obyte here?
INCR I
DJNZ CMD,OUTL
SRB0 ;Select ram bank 0.
JMP ZERA ;Loop back to input wait.
; Byte input routine
IWAI: MOVRI N,TBIT-6
WAI: DJNZ N,WAI
CLRC
JT0H BITON
NOP
RORC
RET
BITON: CPLC
RORC
RET
WLED: OUTB ;Latch A on bus.
MOVI 7 ;NOT led E bit.
ANPA JS ;NOT E.
CPLA
ORPA JS ;E.
RET
;Clear leds
CLED: MOVRI N,370
MOVRA N ;Setup regs.
CLRL: CALL WLED ;Clear led loop.
INCR N ;Next led.
MOVRA N
JNZ CLRL
RET
; Output Acc. to SI/O line
OBYTE: MOVRI K,11 ;# of bits -1
CLRC
ROLC ;Start bit
OLOOP: OUTP TT ;Output bit
RORC
MOVRI N,TBIT-3 ;TBIT - Itime.
OWAIT: DJNZ N,OWAIT
DJNZ K,OLOOP
ORPI TT,377 ;Stop bit.
MOVRI N,TBIT-7 ;TBIT - Itime.
SWAIT: DJNZ N,SWAIT
NOP
RET
;Convert channel and wait.
CONVRT: ORPI S,100 ;STRT.
ANPI S,277 ;NOT STRT.
MOVI =15 ;?
CONL: DECA ;Convert wait.
JNZ CONL
INB ;Read A/D twice for bus unlatch.
INB
RET
;Alfa led output routines.
CALED: MOVI 4 ;Blank string index.
OALFA: MOVAR I ;Save string index.
MOVI 376 ;NOT CE0.
CENBL: MOVRI N,4 ;# of chrs in I.C.
MOVAR K ;Save CE.
MOVAX CEW ;NOT CE.
CHRL: MOVRA I
MOVP3 ;A ← String(chr).
OUTB ;Latch bus output.
MOVI 367
ANPA CEW ;NOT W.
CPLA
ORPA CEW ;W
INCR I ;CHR ← CHR+1.
DJNZ N,CHRL
MOVRA K
ROL ;Next CE.
JBS 3,CENBL
ORPA CEW ;CE.
RET
; Bit spreading table
LOC 1274 ;1274 = Start of page two.
0 ↔ 1 ↔ 4 ↔ 5 ↔ 20 ↔ 21 ↔ 24 ↔ 25
100 ↔ 101 ↔ 104 ↔ 105 ↔ 120 ↔ 121 ↔ 124 ↔ 125
SBITS ← 60 ;Scan bits.
ROW0 ← 357 ;Scan row 0.
ROW1 ← 337 ;Scan row 1.
SCAN: SRB1 ;Select ram bank 1.
CPLF0 ;Reset scan flag.
ORPI S,SBITS ;Turn off rows
ANPI S,ROW0 ;Enable row 0.
INP TT ;Scan row 0
CPLA
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPD ;Get bits from spread table
XCHR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPD
MOVAR SW1
ORPI S,SBITS ;Turn off row 0.
ANPI S,ROW1 ;Enable row 1.
INP TT ;Scan row 1
ORPI S,SBITS ;Disable scan.
CPLA
MOVAR SW2 ;Save row 1
ANI 17 ;Low nibble
MOVPD
ROL ;Shift + bits
ORR SW0 ;Or into - bits
ANI 374 ;Clear teach and off bits.
MOVAR SW0
MOVRA SW2 ;Get row 1 again
SWAP
ANI 17
MOVPD
ROL
ORR SW1
MOVAR SW1
MOVXA PBL ;Get push buttons.
MOVAR SW2 ;Save low nibble.
MOVXA PBH
SWAP ;High nibble.
ORR SW2
CPLA
MOVAR SW2
ANI 77 ;Zero JS and P/O bits.
XCHR SW2
ROLC ;Shift & swap teach & off bits
ROL
ROLC
ANI 3
ORR SW0
MOVAR SW0
MOVRI K,JSW
MOVMA K ;A ← JSW.
ORR SW2
MOVAR SW2 ;SW2 ← JSW .OR. PBSWs.
JINT CKJST ;Check if joy stick.
JMP ZPOTS ;No joy stick.
CKJST: MOVRI K,JSW ;?
MOVMA K ;Joy stick switch bits.
JBS 6,GTOOL ;Check JS/TBOX bit.
;Add P/O bit.
CKJCAL: JBS 7,SETOFF;Check for joy stick calib.
JMP CKJSC
;Check JS switch bits?
GTOOL: ROR ;Get JS teach bit.
RORC
ROR ;Shift tool bits.
ROR
ANI 300
XCHR SW1
ANI 77
ORR SW1 ;Or into SW1.
MOVAR SW1
MOVRA SW0
ROR ;Flush old teach bit.
ROLC ;Shift in JS teach bit.
MOVAR SW0
JMP CKJSC
SETOFF: SRB1 ;Select ram bank 1.
MOVRI P,P0 ;Pots pointer.
MOVRI O,OP0 ;Offset pointer.
MOVRI N,4 ;# of pots.
SETL: MOVMA P ;A ← POT(P).
MOVAM O ;OFFSET(O) ← A.
INCR P
INCR O
DJNZ N,SETL
SRB0 ;Select ram bank 0.
MOVRI K,JSC
MOVI 377
MOVAM K ;JSC ← -1.
JMP CKACT
;Alfa led message table.
LOC 1674 ;Start of page three.
0 ↔ 0 ↔ 0 ↔ 0
" "∧77 ↔ (" "∧77)∨100 ↔ (" "∧77)∨200
(" "∧77)∨300 ↔ " "∧77 ↔ (" "∧77)∨100
(" "∧77)∨200 ↔ (" "∧77)∨300 ↔ " "∧77
(" "∧77)∨100 ↔ (" "∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("1"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("2"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("3"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("4"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("5"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("6"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"L"∧77 ↔ ("I"∧77)∨100 ↔ ("M"∧77)∨200
("I"∧77)∨300 ↔ "T"∧77 ↔ (" "∧77)∨100
("S"∧77)∨200 ↔ ("T"∧77)∨300 ↔ "O"∧77
("P"∧77)∨100 ↔ (" "∧77)∨200 ↔ ("7"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"T"∧77 ↔ ("O"∧77)∨100 ↔ ("O"∧77)∨200
(" "∧77)∨300 ↔ "C"∧77 ↔ ("L"∧77)∨100
("O"∧77)∨200 ↔ ("S"∧77)∨300 ↔ "E"∧77
(" "∧77)∨100 ↔ (" "∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"T"∧77 ↔ ("O"∧77)∨100 ↔ ("O"∧77)∨200
(" "∧77)∨300 ↔ "F"∧77 ↔ ("A"∧77)∨100
("R"∧77)∨200 ↔ (" "∧77)∨300 ↔ " "∧77
(" "∧77)∨100 ↔ (" "∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"T"∧77 ↔ ("E"∧77)∨100 ↔ ("A"∧77)∨200
("C"∧77)∨300 ↔ "H"∧77 ↔ (" "∧77)∨100
("M"∧77)∨200 ↔ ("O"∧77)∨300 ↔ "D"∧77
("E"∧77)∨100 ↔ (" "∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"M"∧77 ↔ ("A"∧77)∨100 ↔ ("N"∧77)∨200
("U"∧77)∨300 ↔ "A"∧77 ↔ ("L"∧77)∨100
(" "∧77)∨200 ↔ ("M"∧77)∨300 ↔ "O"∧77
("D"∧77)∨100 ↔ ("E"∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"N"∧77 ↔ ("O"∧77)∨100 ↔ (" "∧77)∨200
("H"∧77)∨300 ↔ "I"∧77 ↔ ("G"∧77)∨100
("H"∧77)∨200 ↔ (" "∧77)∨300 ↔ "P"∧77
("W"∧77)∨100 ↔ ("R"∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"P"∧77 ↔ ("R"∧77)∨100 ↔ ("O"∧77)∨200
("G"∧77)∨300 ↔ " "∧77 ↔ ("R"∧77)∨100
("U"∧77)∨200 ↔ ("N"∧77)∨300 ↔ "N"∧77
("I"∧77)∨100 ↔ ("N"∧77)∨200 ↔ ("G"∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"R"∧77 ↔ ("U"∧77)∨100 ↔ ("N"∧77)∨200
(" "∧77)∨300 ↔ "H"∧77 ↔ ("O"∧77)∨100
("L"∧77)∨200 ↔ ("D"∧77)∨300 ↔ " "∧77
(" "∧77)∨100 ↔ (" "∧77)∨200 ↔ (" "∧77)∨300
0 ↔ 0 ↔ 0 ↔ 0
"F"∧77 ↔ ("A"∧77)∨100 ↔ ("T"∧77)∨200
("A"∧77)∨300 ↔ "L"∧77 ↔ (" "∧77)∨100
("E"∧77)∨200 ↔ ("R"∧77)∨300 ↔ "R"∧77
("O"∧77)∨100 ↔ ("R"∧77)∨200 ↔ (" "∧77)∨300
LOC 2272
0 ;This is for a block of zeros
END